function MyDateSelect(pane, sd, callbackFunc, opts) {
  this._pane = pane;
  this._sd = sd;
  this._callbackFunc = callbackFunc;
  this._opts = opts;
  this._createElements();
};

MyDateSelect.prototype._createElements = function() {
  var ds, ms, ys, datad = [], datam = [], datay = [], _self = this;
  
  MyUtils.removeChildElements(this._pane);
  
  ds = document.createElement('select');
  ms = document.createElement('select');
  ys = document.createElement('select');
  ds.style.width = '60px';
  ms.style.width = '60px';
  ys.style.width = '80px';
  ms.style.marginLeft = '5px';
  ys.style.marginLeft = '5px';
  this._pane.appendChild(ds);
  this._pane.appendChild(ms);
  this._pane.appendChild(ys);
  
  var tmp = SimpleDate.create();
  if (!this._sd.year || isNaN(this._sd.year) || parseInt(this._sd.year, 10) == 0) {
    for (var i = tmp.year - 100, il = parseInt(tmp.year, 10) + 30; i < il; i++) {
      datay[datay.length] = i;
    }
  } else {
    for (var i = Math.min(tmp.year, this._sd.year) - 100, il = parseInt(Math.max(tmp.year, this._sd.year), 10) + 30; i < il; i++) {
      datay[datay.length] = i;
    }
  }
  for (var i = 1, il = 13; i < il; i++) {
    datam[datam.length] = i;
  }
  datad = MyUtils.getDays(this._sd.month, this._sd.year);
  
  ds.options[ds.options.length] = new Option('dd');
  ds.selectedIndex = 0;
  for (var idx in datad) {
    var obj = datad[idx];
    ds.options[ds.options.length] = new Option((obj < 10) ? '0' + obj : obj);
    if (parseInt(obj, 10) == parseInt(this._sd.date, 10)) {
      ds.selectedIndex = ds.options.length - 1;
    }
  }
  
  ms.options[ms.options.length] = new Option('mm');
  ms.selectedIndex = 0;
  for (var idx in datam) {
    var obj = datam[idx];
    ms.options[ms.options.length] = new Option((obj < 10) ? '0' + obj : obj);
    if (parseInt(obj, 10) == parseInt(this._sd.month, 10)) {
      ms.selectedIndex = ms.options.length - 1;
    }
  }
  
  ys.options[ys.options.length] = new Option('yyyy');
  ys.selectedIndex = 0;
  for (var idx in datay) {
    var obj = datay[idx];
    ys.options[ys.options.length] = new Option((obj < 10) ? '0' + obj : obj);
    if (parseInt(obj, 10) == parseInt(this._sd.year, 10)) {
      ys.selectedIndex = ys.options.length - 1;
    }
  }
  
  ds.onchange = function() {
    if (this.selectedIndex != 0) {
      _self._sd.date = parseInt(this.options[this.selectedIndex].text, 10);
    } else {
      _self._sd.date = 0;
    }
    _self._createElements.call(_self);
  }
  ms.onchange = function() {
    if (this.selectedIndex != 0) {
      _self._sd.month = parseInt(this.options[this.selectedIndex].text, 10);
    } else {
      _self._sd.month = 0;
    }
    _self._createElements.call(_self);
  }
  ys.onchange = function() {
    if (this.selectedIndex != 0) {
      _self._sd.year = parseInt(this.options[this.selectedIndex].text, 10);
    } else {
      _self._sd.year = 0;
    }
    _self._createElements.call(_self);
  }
  this._callbackFunc(this._sd, this._opts);
};